// 

const fs = require('fs');

// fs.mkdirSync('./aaa')
fs.writeFileSync('./aaa/history.json', 'hello world')

/***
 * @param { 异步存在 ：浏览器常见}
 *  1. 定时器 
 *  2. 事件监听 
 *  3. http
 * 
 * 异步代码 获取结果不确定
 * 
 * 如果要获取异步结果，怎么办？
 * 
 * 
 * @function[异步解决方案：]我要主动要主动等待异步结果；
 * 1. 回调函数: 
 *    1> 一个函数
 *    2> 作为参数
 *    3> 传递到其他函数中
 *    4> 执行 
 * 2. promise
 * 3. *函数
 * 4. async await
 */

// import { async } from 'rxjs/internal/scheduler/async';


// function auto(fn) {
//   setTimeout(() => {
//     fn('hello world') // 函数在调用的时候，会把实际参数 传递给 形式参数
//   }, 1000)
// }

// auto(function (res) {
//   console.log(res, 'res')
// })

function auto() {
  // resolve reject padding
  // <pending>  -> resolve  结果成功返回  别人怎么拿到这个结果 .then
  // <pending>  -> reject   返回一个失败的结果   .catch
  // 状态不可逆
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('hello world') // 把成功的结果返回出去
    }, 1000)
  })
}

auto()
  .then(res => {
    // console.log(res)
    return res;
  })
  .then(res1 => {
    // console.log(res1, 'res1')
  })

/**
 * @param {async await 异步解决的终极方案 async await}
 * 1. async 返回 一个promise
 * 2. await 不能单独使用,外层必须配合async,
 * 3. async 函数内部不一定非要使用await
 * 
 */
function auto1() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('hello world') // 把成功的结果返回出去
    }, 2000)
  })
}
function auto2() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('hello world') // 把成功的结果返回出去
    }, 1000)
  })
}

async function test() {
  let data1 = await auto1()
  let data2 = await auto2()
  return data1 + data2;
}

test()
  .then(res => {
    console.log(res, 'res')
  })
